package main

import (
	"fmt"
	"github.com/pkg/errors"
	"io/ioutil"
	"testing"
)

//// 不要使用 panic
// 对于线上环境要尽量避免 panic。在很多情况下，panic 都是引起雪崩效应的罪魁祸首。一旦 error 发生，
// 我们应该向上游调用者返回 error，并且容许调用者对 error 进行检测和处理。

// bad
func uber05_1(bar string) {
	if len(bar) == 0 {
		panic("bar must not be empty")
	}
	// ...
}

// Good
func uber05_2(bar string) error {
	if len(bar) == 0 {
		return errors.New("bar must not be empty")
	}
	// ...
	return nil
}

// Panic/Recover 并不是一种 error 处理策略。进程只有在某些不可恢复的错误发生的时候才需要 panic。
// 在跑 test case 的时候，使用 t.Fatal 或者 t.FailNow ，而不是 panic 来保证这个 test case 会被标记为失败的。
func TestUber05(t *testing.T) {
	f, err := ioutil.TempFile("", "test")
	if err != nil {
		panic("failed to set up test")
	}
	fmt.Println(f)
}
func TestUber06(t *testing.T) {
	f, err := ioutil.TempFile("", "test")
	if err != nil {
		t.Fatal("failed to set up test")
	}
	fmt.Println(f)
}
func main() {

}
